package com.bingxue.edu.framework.job;

import org.springframework.context.annotation.Lazy;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 动态定时任务注解
 * 标记在QuartzJob类上，系统启动后自动加载任务到scheduler中
 *
 * @author panbo
 * @since 2024/8/2
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Lazy
@Component
public @interface DynamicJob {

    /**
     * bean Name
     */
    @AliasFor(annotation = Component.class)
    String value() default "";

    /**
     * 是否懒加载
     */
    @AliasFor(annotation = Lazy.class, value = "value")
    boolean lazy() default true;

    /**
     * 定时任务名称
     */
    String name();

    /**
     * cron表达式
     */
    String cron() default "";

    /**
     * 任务参数
     */
    Class<?> paramClass() default Object.class;
}
